import {configChange} from '../Config';

/**
 * 项目工具
 */

let isOnline: boolean;

/**
 * config变化的时候更新变量
 */
configChange((config: any) => {
    isOnline = config.type === "online";
});


/**
 * 当前是否开发环境
 * @param allowDevChange 默认true 是否允许开发工具修改值 localStorage.env === "dev"
 *                          可能涉及安全性的判断请传递 false
 *                          正式环境调试的时候可以使用 localStorage.env = "dev" 来控制当前环境
 * @return {boolean}
 */
// @ts-ignore
const isDevelopment: Function = (allowDevChange: boolean = true): boolean => {
    return ["development", "localhost"].indexOf(import.meta.env.VITE_CORE_ENV) !== -1 || (allowDevChange && localStorage.env === "dev");
};


/**
 * 当前是否生产环境
 * @return {*}
 */
// @ts-ignore
const isProduction: Function = (): boolean => {
    return import.meta.env.VITE_CORE_ENV === "production";

};

/**
 * 模式是否是线上模式
 */
// @ts-ignore
const isTypeOnline: Function = (): boolean => {
    return isOnline
};
// export function isTypeOnline() {
//     return isOnline;
// }

/**
 * 只在开发环境打印的日志
 */
// @ts-ignore
const log: Function = (...args: any[]): viod => {
    if (isDevelopment()) {
        window.console.log.apply(window.console, args);
    }
};

// @ts-ignore
const tryFunction: Function = (fn, errFn) => {
    try {
        return fn();
    } catch (e) {
        return errFn ? errFn(e) : null;
    }
}

// @ts-ignore
const tryFunctionAsync: Function = async (fn, errFn) => {
    try {
        return await fn();
    } catch (e) {
        return errFn ? (await errFn(e)) : null;
    }
}

/**
 * 当前语言判断
 * @param zhKey
 * @param enKey
 * @returns {*}
 */
// @ts-ignore
// const getLangKey:Function = (zhKey, enKey)=>{}
// export function getLangKey(zhKey, enKey) {
//     return getState(LocaleReducer).name === 'zh' ? zhKey : enKey;
// }

export {
    isDevelopment,
    isProduction,
    log,
    tryFunction,
    tryFunctionAsync
};